package com.example.leetcode.math;

/**
 * 你总共有 n 枚硬币，并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯，其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。
 *
 * 给你一个数字 n ，计算并返回可形成 完整阶梯行 的总行数。
 */
public class leetcode233 {
    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.countDigitOne(13));
    }

    static class Solution {
        public int countDigitOne(int n) {
            int digit = 1; // 个位开始
            int res = 0;
            int high = n / 10;
            int cur = n % 10;
            int low = 0;

            while (high != 0 || cur != 0) {
                if (cur == 0) {
                    res += high * digit;
                } else if (cur == 1) {
                    res += high * digit + low + 1;
                } else {
                    res += (high + 1) * digit;
                }

                // 移动到高一位
                low += cur * digit;
                cur = high % 10;
                high /= 10;
                digit *= 10;
            }

            return res;
        }
    }

}
